#-*- coding: utf-8 -*-
"""
doublettes - recherche les mots avec le plus de paires
consécutives de lettres identiques dans un dictionnaire

Par Guillaume HUYSMANS, 2013.


[Ces paires de mots seront nommées dans le reste 
du code "doublettes" pour faire plus court]
"""

def dbl(s):
        """
        Détermine la longueur de la plus longue suite
        ininterrompue de doublettes dans le mot s.

        >>> dbl('booh')
        1
        >>> dbl('accession')
        1
        >>> dbl('aabbccdd')
        4
        >>> dbl('')
        0
        >>> dbl(' ')
        0
        """
        
        pos = 0 #position dans la chaîne
        ct = 0 #nombre courant de doublettes
        max_ct = 0 #record de doublettes
        sz = len(s)
        
        while pos < sz-1: #pour ne pas sortir en faisant la comparaison
                ###print "pos", pos, s[pos]+s[pos+1],
                if s[pos] == s[pos+1]:
                        ###print "egal --> ct++"
                        #nouvelle doublette à compter
                        ct += 1
                        #nouveau record ? Testé ici pour ne pas avoir
                        #à le faire en sortie de boucle
                        if ct > max_ct:
                                max_ct = ct
                        #doublette potentielle suivante
                        pos += 2
                else:
                        ###print "diff --> ct=0"
                        #peut-être qu'en décalant d'un caractère...
                        pos += 1
                        #remise à zéro du nombre courant de doublettes
                        ct = 0
        return max_ct

def work(filename, threshold):
        """
	S'attaque à une liste de mots contenue dans un fichier texte,
	où les mots sont séparés par un passage à la ligne (\n)

	Les mots pour lesquels dbl() renvoit une valeur supérieure au seuil
	(threshold) seront affichés dans la console.
	
	113809of.fic provient de http://www.dcs.shef.ac.uk/research/ilash/Moby/mwords.tar.Z
	(projet Moby, placé dans le domaine public par Grady Ward)
	
        >>> work('113809of.fic', 3)
        bookkeeper
        bookkeepers
        bookkeeping
        bookkeepings
        """
        
        data = open(filename)
        for line in data:
                word = line.strip()
                if dbl(word) >= threshold:
                        print word


if __name__ == "__main__":
        import doctest
        doctest.testmod()

work('113809of.fic', 3)